//package nancal.mp.mvc.task
//
//import nbcp.client.integration.JenkinsClient
//
//import nbcp.myoql.db.mongo.*
//import nancal.mp.db.mongo.entity.dev.*
//import org.springframework.beans.factory.annotation.Autowired
//import org.springframework.beans.factory.annotation.Value
//import org.springframework.scheduling.annotation.Scheduled
//import org.springframework.stereotype.Component
//import org.springframework.web.bind.annotation.GetMapping

//import org.springframework.web.bind.annotation.RestController

//import java.time.LocalDateTime
//
//@RestController
//@OpenAction
//@Component
//@GroupLog("task")
//@MyLogLevel(LogLevelScopeEnum.warn)
//class JenkinsTaskController {
//
//    @Autowired
//    lateinit var jenkinsClient: JenkinsClient
//
//
//    @Scheduled(fixedDelay = 3000)
//    @GetMapping("/task/sync-job")
//    fun syncLogFromJenkinsJob() {
//        mor.dev.jenkinsLog.query()
//                .where { it.status mongoEquals listOf(JenkinsJobStatusEnum.Prepare, JenkinsJobStatusEnum.Working) }
//                .where { it.buildInfo.buildNumber mongoNotEquals "" }
//                .where { it.createAt lessThan LocalDateTime.now().minusHours(1) }
//                .toList()
//                .forEach {
//                    var result =
//                            jenkinsClient.getLog(
//                                    "",
//                                    it.buildInfo.jobName,
//                                    it.buildInfo.buildNumber
//                            )
//                    if (result.msg.HasValue) {
//                        return@forEach
//                    }
//
//                    saveLog2Db(it.id, result.data!!)
//                }
//    }
//
//    private fun saveLog2Db(gitLogId: String, content: String) {
//        if (content.isEmpty()) {
//            return
//        }
//
//        var lines = content.replace("\\n", "\n").replace("\\t", "\t")
//                .split("\n")
//
//        var list = mutableListOf<JenkinsLogItemData>()
//
//        var lastDetails = mutableListOf<String>()
//        var i = -1;
//        while (true) {
//            i++;
//            if ((i + 1) >= lines.size - 1) {
//                break;
//            }
//            var line = lines[i]
//            if (line == "[Pipeline] stage") {
//                i++;
//                line = lines[i];
//
//
//                //[Pipeline] { (K8s部署)
//                var title = line.substring("[Pipeline] { (".length, line.length - 1)
//
//                var contents = get_contents(i, lines);
//
//                if (contents.size == 1 && contents.first().startsWith("Stage ") &&
//                        contents.first().endsWith(" skipped due to earlier failure(s)")
//                ) {
//                    list.last().successful = false;
//                    break;
//                } else if (list.any()) {
//                    list.last().successful = true;
//                }
//
//                i = i + contents.size;
//
//                list.add(JenkinsLogItemData(title, null, contents.joinToString("\n")));
//            }
//            //获取异常
//            else if (line == "[Pipeline] End of Pipeline") {
//                lastDetails = get_exception(i, lines);
//            }
//        }
//
//        var result: Boolean? = null
//        if (list.any()) {
//            var lastStep = list.last();
//            var lastLine = lines.last { it.HasValue }.trim()
//            if (lastLine.startsWith("Finished:")) {
//                if (lastLine == "Finished: SUCCESS") {
//                    lastStep.successful = true;
//                    result = true
//                } else {
//                    lastStep.successful = false;
//                    result = false
//                }
//
//
//                if (lastDetails.any()) {
//                    lastStep.content = lastStep.content + const.line_break + lastDetails.joinToString("\n")
//                }
//            }
//        }
//
//        var maxLength = 10240
//        list.forEach {
//            if (it.content.length > maxLength) {
//                it.content = it.content.substring(0, maxLength / 2) + "\n...\n" + it.content.Slice(-maxLength / 2);
//            }
//        }
//
//        mor.dev.jenkinsLog.updateById(gitLogId)
//                .set { it.stages to list }
//                .exec()
//    }
//
//    private fun get_exception(startIndex: Int, lines: List<String>): MutableList<String> {
//        var contents = mutableListOf<String>()
//        var j = startIndex;
//        while (true) {
//            j++;
//            if (j >= lines.size - 1) {
//                break;
//            }
//
//            var line = lines[j];
//
//            if (line.startsWith("Finished: ")) {
//                break;
//            }
//            contents.add(line)
//        }
//
//        return contents;
//    }
//
//    private fun get_contents(startIndex: Int, lines: List<String>): List<String> {
//        var contents = mutableListOf<String>()
//        var j = startIndex;
//        while (true) {
//            j++;
//            if (j >= lines.size - 1) {
//                break;
//            }
//
//            var line = lines[j];
//
//            if (line.startsWith("[Pipeline] ")) {
//                if (line.startsWith("[Pipeline] }") && lines[j + 1] == "[Pipeline] // stage") {
//                    break;
//                }
//                line = line.Slice("[Pipeline] ".length)
//            }
//            contents.add(line)
//        }
//
//        return contents;
//    }
//}